package cn.oppexecise;

import java.util.Scanner;

/**
 * @author SWJ
 * @create 2021-06-10 16:19
 * 本类用于测试异常的入门案例
 */
public class ExceptionDemo {
    public static void main(String[] args) {
//        method();
        //调用方法暴露异常
//        method2();
        //异常方案捕获处理
//        method3();
        f();
//为了处理 method3();抛出的异常
    }

    private static void f() {
        try {
            method3();
        } catch (Exception e) {
            System.out.println("输入正确的数据");

        }
    }

    private static void method3()
            throws Exception {
        /**创建异常解决方案*/
        System.out.println("请输入一个数");
        int i = new Scanner(System.in).nextInt();
        /**提示输入第二个数*/
        System.out.println("输入第二个数");
        int j = new Scanner(System.in).nextInt();
        System.out.println(i / j);

    }

    private static void method2() {
        /**可能会出现异常的代码--提前布局
         * 如果发生异常会被catch捕获
         * 执行之前会被catch中提供的解决方案*/
        try {
            System.out.println("请输入一个数");
            int i = new Scanner(System.in).nextInt();
            /**提示输入第二个数*/
            System.out.println("输入第二个数");
            int j = new Scanner(System.in).nextInt();
            System.out.println(i / j);
//        }catch (InputMismatchException e){
//            System.out.println("请输入正确的整数类型");
//        }catch (ArithmeticException e){
//            System.out.println("请输入正确的数不能为0");
        } catch (Exception e) {
            System.out.println("输入错误");
        }
        /**1.请输入一个数
         7
         输入第二个数
         5.6
         请输入正确的整数类型
         ****************************************
         * 请输入一个数
         * 17
         * 输入第二个数
         * 0
         * Exception in thread "main" java.lang.ArithmeticException: / by zero
         * 	at cn.oppexecise.ExceptionDemo.method2(ExceptionDemo.java:30)
         * 	at cn.oppexecise.ExceptionDemo.main(ExceptionDemo.java:16)
         * 	*****************************************************
         * 	2.请输入一个数
         * 18
         * 输入第二个数
         * 0
         * 请输入正确的数不能为0
         *
         * Process finished with exit code 0*/


/**异常捕获的格式
 * try{
 *可能会抛出异常的代码
 * }catch{(异常类型 异常的名字)
 *匹配到了错误，进行解决处理的方案
 * }
 * try {
 * }catch（）{
 * }可以异常处理
 * 7.这就是多态最为经典的一种用法
 * 我们不关心子类的具体类型而是将子类所有统一父类来处理
 * 提供功用的解决方案
 *
 * 如果出现抛出异常 捕获和继续向上抛出
 * 而不是把问题抛给main()方法 因为没人解决详见 f（）方法调用method3()
 * */

    }

    private static void method() {

        System.out.println("请输入一个数");
        int i = new Scanner(System.in).nextInt();
        /**提示输入第二个数*/
        System.out.println("输入第二个数");
         System.out.println("testgitee");
        int j = new Scanner(System.in).nextInt();
        System.out.println(i / j);
        //    Exception in thread "main" java.util.InputMismatchException
        //
        //    //InputMismatchException输入不匹配异常
        //    //ArithmeticException 算数异常，除数不为0

//    at java.util.Scanner.throwFor(Scanner.java:864)
//    at java.util.Scanner.next(Scanner.java:1485)
//    at java.util.Scanner.nextInt(Scanner.java:2117)
//    at java.util.Scanner.nextInt(Scanner.java:2076)
//    at cn.oppexecise.ExceptionDemo.method(ExceptionDemo.java:23)
//    at cn.oppexecise.ExceptionDemo.main(ExceptionDemo.java:13)
    }


}
